package ch.penas.business.service;

import java.sql.Connection;
import java.sql.SQLException;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;

import org.apache.derby.tools.ij;
import org.eclipse.persistence.internal.jpa.EntityManagerImpl;

/** @author Daniel */
public abstract class FormateurCompetenceAbstractMYSQL {

    /** Donne le chemin du fichier .sql de la base de donnée
     * FormateurCompetence. */
    private static String mDDLFileName =
    "/sql/createFormateurCompetenceDB_MYSQL.sql";
    /** permet de crée un EntityManagerFactory. */
    private static EntityManagerFactory mEntityManagerFactory;
    /** permet de crée un EntityTransaction. */
    private static EntityTransaction mEntityTransaction;
    /** Donne le nom du fichier Persistence au quel la connexion ce fais. */
    private static String mPersistenceUnit = "test";
    /** permet de crée un EntityManager. */
    private static EntityManager mEntityManager;

    /** Permet de crée une connexion a la base de donnée.
    *
    * @throws Exception gère une eventuel exception
    */
    public static void initFixture() throws Exception {
        mEntityManagerFactory = Persistence.createEntityManagerFactory(
        mPersistenceUnit);
        mEntityManager = mEntityManagerFactory.createEntityManager();
        mEntityTransaction = mEntityManager.getTransaction();

        Connection connection = ((EntityManagerImpl) (mEntityManager
                .getDelegate())).getServerSession()
                .getAccessor().getConnection();

        ij.runScript(connection, FormateurCompetenceAbstractMYSQL.class
                .getResourceAsStream(mDDLFileName),
                "UTF-8", System.out, "UTF-8");
    }

    /** Permet de fermer toute les connexion a la bas de donnée.
    *
    * @throws SQLException permet de gérer l'exception SQL
    */
    public static void closeEntityManager() throws SQLException {
        mEntityManager.close();
        mEntityManagerFactory.close();
    }

    /** Getter de EntityManagerFactory.
     *
     * @return mEntityManagerFactory
     */
    protected final EntityManagerFactory getEntityManagerFactory() {
        return mEntityManagerFactory;
    }

    /** Getter de EntityTransaction.
     *
     * @return mEntityTransaction
     */
    protected final EntityTransaction getEntityTransaction() {
        return mEntityTransaction;
    }

    /** Getter de EntityManager.
     *
     * @return mEntityManager
     */
    protected final EntityManager getEntityManager() {
        return mEntityManager;
    }
}